home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
games
/
larn12s.arc
/
LARN.ARC
/
OBJECT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1987-10-28
|
27KB
|
845 lines
/* object.c Larn is copyrighted 1986 by Noah Morgan. */
#include "header.h"
/*
***************
LOOK_FOR_OBJECT
***************
subroutine to look for an object and give the player his options
if an object was found.
*/
lookforobject()
{
register int i,j;
if (c[TIMESTOP]) return; /* can't find objects is time is stopped */
i=item[playerx][playery]; if (i==0) return;
showcell(playerx,playery); cursors(); yrepcount=0;
switch(i)
{
case OGOLDPILE: case OMAXGOLD:
case OKGOLD: case ODGOLD: lprcat("\n\nYou have found some gold!"); ogold(i); break;
case OPOTION: lprcat("\n\nYou have found a magic potion");
i = iarg[playerx][playery];
if (potionname[i][0]) lprintf(" of %s",&potionname[i][1]); opotion(i); break;
case OSCROLL: lprcat("\n\nYou have found a magic scroll");
i = iarg[playerx][playery];
if (scrollname[i][0]) lprintf(" of %s",&scrollname[i][1]);
oscroll(i); break;
case OALTAR: if (nearbymonst()) return;
lprcat("\n\nThere is a Holy Altar here!"); oaltar(); break;
case OBOOK: lprcat("\n\nYou have found a book."); obook(); break;
case OCOOKIE: lprcat("\n\nYou have found a fortune cookie."); ocookie(); break;
case OTHRONE: if (nearbymonst()) return;
lprintf("\n\nThere is %s here!",objectname[i]); othrone(0); break;
case OTHRONE2: if (nearbymonst()) return;
lprintf("\n\nThere is %s here!",objectname[i]); othrone(1); break;
case ODEADTHRONE: lprintf("\n\nThere is %s here!",objectname[i]); odeadthrone(); break;
case OORB: lprcat("\n\nYou have found the Orb!!!!!"); oorb(); break;
case OPIT: lprcat("\n\nYou're standing at the top of a pit."); opit(); break;
case OSTAIRSUP: lprcat("\n\nThere is a circular staircase here"); ostairs(1); /* up */ break;
case OELEVATORUP: lprcat("\n\nYou feel heavy for a moment, but the feeling disappears");
oelevator(1); /* up */ break;
case OFOUNTAIN: if (nearbymonst()) return;
lprcat("\n\nThere is a fountain here"); ofountain(); break;
case OSTATUE: if (nearbymonst()) return;
lprcat("\n\nYou are standing in front of a statue"); ostatue(); break;
case OCHEST: lprcat("\n\nThere is a chest here"); ochest(); break;
case OIVTELETRAP: if (rnd(11)<6) return;
item[playerx][playery] = OTELEPORTER;
# ifdef DGK
know[playerx][playery] = KNOWALL;
# else
know[playerx][playery] = 1;
# endif
case OTELEPORTER: lprcat("\nZaaaappp! You've been teleported!\n");
beep(); nap(3000); oteleport(0);
break;
case OSCHOOL: if (nearbymonst()) return;
lprcat("\n\nYou have found the College of Larn.");
lprcat("\nDo you (g) go inside, or (i) stay here? ");
i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
if (i == 'g') { oschool(); /* the college of larn */ }
else lprcat(" stay here");
break;
case OMIRROR: if (nearbymonst()) return;
lprcat("\n\nThere is a mirror here"); omirror(); break;
case OBANK2:
case OBANK: if (nearbymonst()) return;
if (i==OBANK) lprcat("\n\nYou have found the bank of Larn.");
else lprcat("\n\nYou have found a branch office of the bank of Larn.");
lprcat("\nDo you (g) go inside, or (i) stay here? ");
j=0; while ((j!='g') && (j!='i') && (j!='\33')) j=getchar();
if (j == 'g') { if (i==OBANK) obank(); else obank2(); /* the bank of larn */ }
else lprcat(" stay here");
break;
case ODEADFOUNTAIN: if (nearbymonst()) return;
lprcat("\n\nThere is a dead fountain here"); break;
case ODNDSTORE: if (nearbymonst()) return;
lprcat("\n\nThere is a DND store here.");
lprcat("\nDo you (g) go inside, or (i) stay here? ");
i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
if (i == 'g')
dndstore(); /* the dnd adventurers store */
else lprcat(" stay here");
break;
case OSTAIRSDOWN: lprcat("\n\nThere is a circular staircase here"); ostairs(-1); /* down */ break;
case OELEVATORDOWN: lprcat("\n\nYou feel light for a moment, but the feeling disappears");
oelevator(-1); /* down */
break;
case OOPENDOOR: lprintf("\n\nYou have found %s",objectname[i]);
lprcat("\nDo you (c) close it"); iopts();
i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
if ((i=='\33') || (i=='i')) { ignore(); break; }
lprcat("close"); forget();
item[playerx][playery]=OCLOSEDDOOR;
iarg[playerx][playery]=0;
playerx = lastpx; playery = lastpy;
break;
case OCLOSEDDOOR: lprintf("\n\nYou have found %s",objectname[i]);
lprcat("\nDo you (o) try to open it"); iopts();
i=0; while ((i!='o') && (i!='i') && (i!='\33')) i=getchar();
if ((i=='\33') || (i=='i'))
{ ignore(); playerx = lastpx;
playery = lastpy; break; }
else
{
lprcat("open");
if (rnd(11)<7)
{
switch(iarg[playerx][playery])
{
case 6: c[AGGRAVATE] += rnd(400); break;
case 7: lprcat("\nYou are jolted by an electric shock ");
lastnum=274; losehp(rnd(20)); bottomline(); break;
case 8: loselevel(); break;
case 9: lprcat("\nYou suddenly feel weaker ");
if (c[STRENGTH]>3) c[STRENGTH]--;
bottomline(); break;
default: break;
}
playerx = lastpx; playery = lastpy;
}
else
{
forget(); item[playerx][playery]=OOPENDOOR;
}
}
break;
case OENTRANCE: lprcat("\nYou have found "); lprcat(objectname[OENTRANCE]);
lprcat("\nDo you (g) go inside"); iopts();
i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
if (i == 'g')
{
newcavelevel(1); playerx=33; playery=MAXY-2;
item[33][MAXY-1]=know[33][MAXY-1]=mitem[33][MAXY-1]=0;
draws(0,MAXX,0,MAXY); bot_linex(); return;
}
else ignore();
break;
case OVOLDOWN: lprcat("\nYou have found "); lprcat(objectname[OVOLDOWN]);
lprcat("\nDo you (c) climb down"); iopts();
i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
if ((i=='\33') || (i=='i')) { ignore(); break; }
if (level!=0) { lprcat("\nThe shaft only extends 5 feet downward!"); return; }
if (packweight() > 45+3*(c[STRENGTH]+c[STREXTRA])) { lprcat("\nYou slip and fall down the shaft"); beep();
lastnum=275; losehp(30+rnd(20)); bottomhp(); }
else lprcat("climb down"); nap(3000); newcavelevel(MAXLEVEL);
for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++) /* put player near volcano shaft */
if (item[j][i]==OVOLUP) { playerx=j; playery=i; j=MAXX; i=MAXY; positionplayer(); }
draws(0,MAXX,0,MAXY); bot_linex(); return;
case OVOLUP: lprcat("\nYou have found "); lprcat(objectname[OVOLUP]);
lprcat("\nDo you (c) climb up"); iopts();
i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
if ((i=='\33') || (i=='i')) { ignore(); break; }
if (level!=11) { lprcat("\nThe shaft only extends 8 feet upwards before you find a blockage!"); return; }
if (packweight() > 45+5*(c[STRENGTH]+c[STREXTRA])) { lprcat("\nYou slip and fall down the shaft"); beep();
lastnum=275; losehp(15+rnd(20)); bottomhp(); return; }
lprcat("climb up"); lflush(); nap(3000); newcavelevel(0);
for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++) /* put player near volcano shaft */
if (item[j][i]==OVOLDOWN) { playerx=j; playery=i; j=MAXX; i=MAXY; positionplayer(); }
draws(0,MAXX,0,MAXY); bot_linex(); return;
case OTRAPARROWIV: if (rnd(17)<13) return; /* for an arrow trap */
item[playerx][playery] = OTRAPARROW;
know[playerx][playery] = 0;
case OTRAPARROW: lprcat("\nYou are hit by an arrow"); beep(); /* for an arrow trap */
lastnum=259; losehp(rnd(10)+level);
bottomhp(); return;
case OIVDARTRAP: if (rnd(17)<13) return; /* for a dart trap */
item[playerx][playery] = ODARTRAP;
know[playerx][playery] = 0;
case ODARTRAP: lprcat("\nYou are hit by a dart"); beep(); /* for a dart trap */
las